package main

import (
	"fmt"
	"github.com/gin-contrib/sessions"
	"github.com/gin-contrib/sessions/redis"
	"github.com/gin-gonic/gin"
	"net/http"
)

// 	使用	session 需要下载中间件：
//	go get github.com/gin-contrib/sessions
//	go get github.com/gin-contrib/sessions/cookie
// 	分布式下多服务要共享session，所以用到redis，还需要下载一个插件
//	go get github.com/gin-contrib/sessions/redis

func main() {

	r := gin.Default()

	// 开始配置 session
	// 创建 redis 的存储引擎，有一些参数：
	// size： 连接数
	// 连接方式
	// 链接地址和端口
	// 用户名
	// 密码
	// 加密的密钥

	store, err := redis.NewStore(10, "tcp", "localhost:6379", "", "", []byte("加密的密钥"))
	if err != nil {
		fmt.Println("连接redis错误：", err)
	}
	// 配置 session 的中间件，可以使用很多种引擎进行配置，获取session 的时候，就是通过 mySession 这个key获取
	r.Use(sessions.Sessions("mySession", store))

	r.GET("/set", func(context *gin.Context) {
		// 设置 session
		session := sessions.Default(context) // 需要先拿到session实例
		session.Set("username", "张三")
		session.Save() // 需要调用保存函数

		context.JSON(http.StatusOK, gin.H{
			"method": "SUCCESS",
		})
	})
	// 调用了 http://localhost:8080/set  以后会发现浏览器上多了一个 key 为  mySession 的cookie
	// 只要有 mySession 这个 cookie，就可以获取到session

	r.GET("/get", func(context *gin.Context) {

		// 获取session
		session := sessions.Default(context) // 需要先拿到session实例
		username := session.Get("username")

		context.JSON(http.StatusOK, gin.H{
			"cookie": username,
		})
	})

	r.Run()
}
